// 导入 router/index.js
import router from "./index.js";
// 导入 stores/menu.js
import { useMenuStore } from "../stores/menu.js";
// 导入Layout
import Layout from '@/Layout/index.vue'

// 设置路由白名单
const whiteRouter = ['/', '/login', '/404', 'error']
// 全局前置路由守卫
router.beforeEach((to, from, next) => {
    // 使用pinia
    const menuStore = useMenuStore();
    // 判断是否处于白名单
    if(whiteRouter.indexOf(to.path) == -1) {
        // 判断routerList中是否
        if(menuStore.routerList.length == 0) {
            // 设置动态路由数据结构，并添加到路由中
            menuStore.generateRouter().then(() => {
                // 添加到动态路由
                const routerList = menuStore.routerList
                // 所有的页面都是加载到Layout/Main组件的RouterView中
                router.addRoute({
                    component: Layout,
                    path: '/',
                    redirect: 'index',
                    children: routerList
                })
                // 跳转页面
                next({...to, replace: true})
            })
        } else {
            // 已经有动态路由
            // 情况1： 路由的路径是合法的，正常的
            if(to.matched.length != 0) {
                next();
            } else {
                // 情况2： 路由的路径并没有，跳转到404
                next('/404')
            }
        }
    } else {
        // 直接放行
        next();
    }
})